package com.qingxin.sys.mvc;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonSerialize;


/**
 * 分页对象 
 * @author Administrator
 *
 */
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class Pager implements Serializable{
	private static final long serialVersionUID = -4755996539799069756L;
	
	protected int pageNo = 1;//当前页码，从1开始
	protected int pageSize = 20;//每页条数
	protected int total = 0;//总条数
	protected int totalPage;//总页数
	protected List<?> rows;//当前页的数据

	public Pager() {
		this(new ArrayList<Object>(), 0);
	}

	
	public Pager(int pageNo, int pageSize, int total) {
		setTotal(total);
		setPageSize(pageSize);
		setPageNo(pageNo);
		getTotalPage();
	}
	
	
	
	public Pager(int pageNo, int pageSize, int total, List<?> rows) {
		this(pageNo, pageSize, total);
		this.rows = rows;
	}

	
	public Pager(List<?> rows, int total) {
		this.rows = rows;
		this.total = total;
		this.pageNo = 1;
		this.pageSize = total > 0 ? total : 1;
		this.totalPage = 1;
	}
	

	/**
	 * 获得当前页码
	 */
	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		if (pageNo < 1) {
			this.pageNo = 1;
		} else {
			this.pageNo = pageNo;
		}
	}
	
	
	/**
	 * 获取每页设置条数
	 */
	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		if (pageSize < 1) {
			this.pageSize = 20;
		} else {
			this.pageSize = pageSize;
		}
	}
	
	
	/**
	 * 获取总条数
	 */
	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		if (total < 0) {
			this.total = 0;
		} else {
			this.total = total;
		}
	}
	
	
	/**
	 * 获取总页数
	 */
	public int getTotalPage() {
		if(totalPage <= 0){
			totalPage = total / pageSize;
			if (totalPage == 0 || total % pageSize != 0) {
				totalPage++;
			}
		}
		return totalPage;
	}
	

	/**
	 * 是否第一页
	 */
	@JsonIgnore
	public boolean isFirstPage() {
		return pageNo <= 1;
	}

	/**
	 * 是否最后一页
	 */
	@JsonIgnore
	public boolean isLastPage() {
		return pageNo >= getTotalPage();
	}

	
	/**
	 * 下一页页码
	 */
	@JsonIgnore
	public int getNextPage() {
		if (isLastPage()) {
			return pageNo;
		} else {
			return pageNo + 1;
		}
	}

	
	/**
	 * 上一页页码
	 */
	@JsonIgnore
	public int getPrePage() {
		if (isFirstPage()) {
			return pageNo;
		} else {
			return pageNo - 1;
		}
	}
	
	
	/**
	 * 获得数据列表
	 * 
	 * @return 分页内容
	 */
	public List<?> getRows() {
		return rows;
	}


	/**
	 * 设置数据列表
	 * 
	 * @param rows
	 */
	public void setRows(List<?> rows) {
		this.rows = rows;
	}

	
	/**
	 * 获得数据列表
	 * 
	 * @return 分页内容
	 */
	@JsonIgnore
	public List<?> getList() {
		return rows;
	}
	
	
	/**
	 * 设置数据列表
	 * 
	 * @param rows
	 */
	public void setList(List<?> rows) {
		this.rows = rows;
	}
	

	/**
	 * 得到第一条数据位置
	 * 
	 * @return 第一条数据位置
	 */
	@JsonIgnore
	public int getFirstResult() {
		return (pageNo - 1) * pageSize;
	}
	
	
	/**
	 * 是否还有更多数据
	 * @return
	 */
	@JsonIgnore
	public boolean hasMoreData(){
		return pageNo <= totalPage;
	}
	
	
	
}
